package leetcode21_30;

import outoforder.leetcode.ListNode;

import java.util.ArrayDeque;
import java.util.Stack;

/**
 * @author shhjiang_001
 * @create 2020-06-13 23:24
 */

        /*
        给你一个链表，每 k 个节点一组进行翻转，请你返回翻转后的链表。
        k 是一个正整数，它的值小于或等于链表的长度。
        如果节点总数不是 k 的整数倍，那么请将最后剩余的节点保持原有顺序。
        示例：
        给你这个链表：1->2->3->4->5
        当 k = 2 时，应当返回: 2->1->4->3->5
        当 k = 3 时，应当返回: 3->2->1->4->5

       */
public class Solution25 {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode resLN = new ListNode();
        ListNode empt = resLN;
        boolean isFlag = true;
        int m = 0;
        while (isFlag){
            Stack<Integer> stack = new Stack<>();
            for (int i = m;i < m+k;i++){
                stack.push(head.val);
                if (head.next == null){
                    isFlag = false;
                    break;
                }else {
                    head = head.next;
                }
            }
            if (stack.size() == k){
                while (!stack.empty()){
                    empt.next = new ListNode();
                    empt = empt.next;
                    empt.val = stack.pop();
                }
            }else {
                Stack<Integer> stack1 = new Stack<>();
                while (!stack.empty()){
                    stack1.push(stack.pop());
                }
                while (!stack1.empty()){
                    empt.next = new ListNode();
                    empt = empt.next;
                    empt.val = stack1.pop();
                }
            }
            m = m+k;
        }
        return resLN.next;
    }
}
